什么是rmi?为什么要使用rmi框架?

java 分享会

分享人:李宁虎

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。

Java远程方法协议(英语:Java Remote Method Protocol,JRMP)是特定于Java技术的、用于查找和引用远程对象的协议。这是运行在Java远程方法调用(RMI)之下、TCP/IP之上的线路层协议

RMI技术早在JDK1.1中就出现了,并且在JDK1.5版本做了重大改进,使得我们可以更加简单的使用RMI技术来支持分布式应用。关于详细的技术变更历史,可以参见官方的 Java RMI release Note。

通过RMI技术,本地虚拟机JVM可以调用存在于另外一个JVM中的对象方法,就好像该虚拟机调用存在于本地JVM的某个对象方法一样。而另外一个JVM可以与本地JVM在同一台物理机,也可以属于不同的物理机。 常见的可以实现远程调用的技术还包括了 RPC,CORBA,Web Service,这里不一一介绍,需要了解的同学可以 google,以下只关注 RMI 这个只针对 Java 语言的远程调用技术的一些阐述。

2.知识剖析

RMI 注册表(参见 LocateRegistry 类)

*为了使得客户端能够查找到服务端对外提供的远程对象,RMI需要维护一个RMI注册表,该注册表维护了对于客户端而言的远程对象位置,对外提供了服务,服务端需要将要外提供服务的对象的代理绑定到RMI注册表中。

*RMI注册表可以跟服务端不在一台主机上。

*RMI注册表的启动有两种方式:一种是通过命令行 rmiregistry $port 在命令行启动;另外一种是通过 LocateRegistry 类的 createRegistry(int port) 方法启动。

客户端查找远程对象,服务端注册远程对象的多样性

也许在网上查看各种RMI示例代码时我们常常发现客户端查找远程对象,服务端注册远程对象使用的代码都不尽相同,我在学习过程中见到的有三种途径:

LocateRegistry 类的对象的 rebind() 和 lookup() 来实现绑定注册和查找远程对象的

利用命名服务 java.rmi.Naming 类的 rebind() 和 lookup() 来实现绑定注册和查找远程对象的

利用JNDI(Java Naming and Directory Interface,Java命名和目录接口) java.naming.InitialContext 类来 rebind() 和 lookup() 来实现绑定注册和查找远程对象的

3.常见问题

Spring RMI一开始看网上的资料感觉很简单,但一次一次的失败告诉我,那不简单

4.解决方案

5.编码实战

让我们来看看这个例子的代码。

6.扩展思考

RMI涉及到安全机制方面的问题 看到这里,已经在本机上地运行了网上某些示例代码,然而在本机环境中的成功运行,实际上对于真正的分布式应用来说是缺乏真实的参照性的,我在完成本机运行后实际上对于RMI的认识还是非常肤浅的,而网络上对于在服务端和客户端程序运行的两台不同物理主机的RMI示例内容很少

7.参考文献

作者:Jacendfeng 链接:https://segmentfault.com/a/1190000004494341#articleHeader4

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 北京分院 李宁虎